home *** CD-ROM | disk | FTP | other *** search
-
- Modula-2-Modul DruckTreiberV2.0
- ===============================
-
-
-
- Das Kleingedruckte:
-
- Dieses Modula-2-Modul ist Public Domain, d.h. es darf zu privaten Zwecken
- von jedermann verwendet und frei kopiert werden. Dabei müssen immer alle
- dazugehörigen Dateien weitergegeben werden: DRUCKTRE.DEF, .MOD, .DOC,
- CFGINSTA.PRG, .DOC und LQ_15_OE.HEX. Die Freigabe zur gewerblichen
- Nutzung behalte ich mir vor.
-
- Die .DEF und .MOD Dateien wurden mit dem LPR-Modula-2-System Version 1.4
- übersetzt. Wer eine andere Version oder ein anderes System benutzt muß
- die Module neu übersetzen.
-
- Wenn jemand Änderungen (hoffentlich Verbesserungen) im Programmtext vor-
- nimmt, darf die Copyright-Zeile mit meinem Namen u. Adresse nicht ge-
- löscht werden. Außerdem bitte ich darum, daß mir die Verbesserungen zuge-
- schickt werden. Ich bezeichne mich nicht als unfehlbar und bin deshalb
- dankbar, wenn ich auf Unzulänglichkeiten oder Fehler des Programms auf-
- merksam gemacht werde. Danke.
-
- Hier meine Adresse: Uwe Ischebeck
- Ringstr. 31
- D-6900 Heidelberg
-
- Ein Aufruf, bei mir einen Obulus für die Nutzung des Moduls oder des
- Install-Programms abzuliefern folgt hier nicht. Ich hasse sowas. Nur wer
- erwartet, daß ich ihm etwas zuschicke, sollte mir einen entsprechenden
- Freiumschlag und, falls notwendig eine Diskette zuschicken.
-
- Und jetzt zur Sache:
-
-
- Anleitung zum M2-Modul DruckTreiber:
-
- Dieses Modul entstand aus einer ganz einfachen Überlegung. Ich tausche meine
- selbstgeschriebenen Programme gerne mit anderen ST-Besitzern. Da aber nicht
- alle den gleichen Drucker haben wie ich, und die meisten von denen auch nicht
- voll Epson-kompatibel sind, mußte ein druckerunabhängiges Ausgabemodul her.
-
- 1stWordPlus bietet dazu eine recht komfortable Möglichkeit an, indem es nach
- Programmstart eine CFG-Datei einliest, in der viele Druckfunktionen und die
- Zeichenanpassung stehen. Außerdem ist diese Textverarbeitung eine der meist-
- verbreiteten auf dem ST. Die meisten Benutzer werden deshalb eine oder mehrere
- auf ihren Drucker zugeschnittene Anpassungen haben. Und wer keine hat, kann
- sich mit dem mitgelieferten Programm CfgInstall eine Anpassung schneidern. Den
- Aufbau der dafür notwendigen .HEX-Datei kann man der untenstehenden Beschrei-
- bung entnehmen.
-
- Die meisten modernen Drucker sind wesentlich intelligenter, als von
- 1stWordPlus angenommen wird. Außerdem sind die grafischen Fähigkeiten dieser
- Textverarbeitung eher mäßig bis schlecht, sodaß hier noch ein paar Erweiter-
- ungen für einen brauchbaren Druckertreiber notwendig sind.
-
- Und um die Erweiterungen auch in eine CFG-Datei zu packen mußte ein neues
- Installprogramm geschrieben werden. So wurde die Zahl der Druckfunktionen auf
- 40hex erweitert. Auch können jetzt bis zu 253 Bytes für eine Funktion oder ein
- Zeichen kodiert werden. Da eine Zeile in den meisten Edtitoren nicht so lang
- werden darf, sind jetzt auch Fortsetzungszeilen erlaubt, die in der ersten
- Spalte einen Bindestrich (2Dhex) enthalten. WordPlus stört sich an diesen
- Änderungen wenig, nur das GST-Installprogramm machte bisher diese Einschränk-
- ungen. Allerdings habe ich nicht ausprobiert, wie groß die CFG-Datei werden
- darf, damit WordPlus noch damit fertig wird (bis 2kByte funktioniert es auf
- jeden Fall). Mit dem alten Install hätte eine CFG-Datei bis zu 11kBytes groß
- werden können, sodaß es also auch bis zu dieser Größe keine Probleme geben
- dürfte (hoffentlich hat GST daran gedacht). Die Größe der CFG-Datei bei
- CfgInstall ist auf 16kBytes begrenzt. Größer gehts sicher auch, allerdings ist
- der Programmieraufwand dafür ungleich größer, was mich dazu bewogen hat, die
- Finger davon zu lassen.
-
- Im DruckTreiber-Modul habe ich die Größe der CFG-Datei auf 2kBytes begrenzt,
- was aber bequem bis maximal 16kB vergrößert werden kann, indem man "a" in
- TDruckSteuer entsprechend anpasst ([0..16383]).
-
- Die Funktion des Moduls beruht auf der Struktur TDruckSteuer, die über die
- importierbare Variable S angesprochen wird. Die Variable hat folgendes
- Aussehen:
-
- TYPE TDruckSteuer = RECORD
- d : String; (* ARRAY[0..79] OF CHAR, Name
- der CFG-Datei, wird von Config dort hin kopiert *)
- filehandle : INTEGER; (* GEMDOS-Handle, auf
- diesen Kanal werden die Daten ausgegeben *)
- geladen, (* Flag, ob Treiber geladen *)
- LQ: BOOLEAN; (* Flag für LQ-Schrift *)
- ersatz : CHAR (* Dieses Zeichen wird gedruckt, wenn ein
- nicht verfügbares Zeichen im Druckertreiber ankommt *)
- n : StringPoiter; (* Zeiger auf den Namen der Druckeran-
- passung, Ende der Zeichenkette durch 0hex markiert *)
- par : ARRAY[0..5] OF CHAR; (* 6 Konfigurationsvariablen,
- in der HEX-Datei beschrieben. *)
- c : ARRAY[0..MaxFunc] OF INTEGER; (* Funktionentabelle*)
- z : ARRAY[0..255] OF INTEGER; (* Zeichentabelle *)
- a : ARRAY[0..2047] OF CHAR; (* Hier stehen die
- eigentlichen Daten des Treibers wie sie aus der Datei
- *.CFG gelesen werden. Die Felder c und z enthalten
- lediglich einen Zeiger auf untenstehende Struktur im
- Feld a *)
- END;
- VAR S : TDruckSteuer;
-
- Die Struktur, auf die c[i] und z[i] im Feld a zeigen:
- RECORD
- len : BYTE; (* Länge der Funktion/Zeichenkette incl. len und num *)
- num : BYTE; (* Nummer der Funktion/des Zeichens *)
- c : ARRAY[2..len] OF CHAR; (* diese Zeichenkette wird im Endeffekt an
- den Drucker geschickt *)
- END;
-
- Die Struktur wird über S.a[c[i]] angesprochen. Wer's noch genauer wissen will,
- schaut bitte im Programmtext nach.
-
- Die meisten Funktionen des Moduls sind in der .DEF-Datei beschrieben. Hier
- soll trotzdem kurz auf ein paar eingegangen werden:
-
- SetLQ(TRUE/FALSE):
- Setzt oder löscht das LQ-Flag in S. Wird bei gesetztem LQ-Flag eine
- Funktion zu Ausgabe von "Kursivschrift an" o.ä. angesprochen, wird die
- für LQ notwendige Funktion aufgerufen, sonst die für Schnellschrift.
- Deshalb kann man die Ausgabe immer mit den Funktionen für Schnellschrift
- programmieren und bei Bedarf das LQ-Flag setzen.
-
- PrintHandle(handle):
- Alle Druckerausgaben werden mit einem GEMDOS.-Write(handle...) ausge-
- führt. Der Ausgabekanal "handle" kann mit dieser Prozedur neu festgelegt
- werden.
-
- PrintDirekt...( ): Diese Prozeduren schicken die übergebenen Zeichen bzw.
- Bytes direkt, d.h. ohne Umwandlung an den Ausgabekanal
- (wichtig für Grafiken).
-
- PrintChar( ),
- PrintString( ): Hier übergebene Zeichen werden gemäß der Zeichenüberset-
- zungstabelle der CFG-Datei umgewandelt und an den Ausgabe-
- kanal geschickt.
-
- PrintSteuer(nr,wert):
- Wenn in der Druckeranpassung die Funktion "nr" vorgesehen ist, wird diese
- mit allen notwendigen Codes an den Drucker gesendet. Für Funktionen, die
- einen Parameter benötigen, z.B. "horizontaler Sprung an Spalte x"
- (horizontal TAB) wird der "wert" mit in den Steuerstrom eingebaut. Da
- "wert" eine Integervariable ist, 1stWordPlus aber nur mit BYTE-Variablen
- arbeitet, muß bei den von der Textverarbeitung bekannten Funktionen ein
- Wert zwischen 0 und 255 übergeben werden. Bei den Funktionen in der
- Erweiterung unterliegt dieser Parameter keinen Einschränkungen.
-
- Als Schmankerl ist noch eine weitere Prozedur eingebaut:
- PrintString4(s0,s1,s2,s3,string):
- Diese Prozedur soll eine Menge Programmierarbeit ersparen. Mit s0 bis s3
- werden Steuerfunktionen aufgerufen. Ein Wert kleiner 0 wird ignoriert.
- Benötigt eine dieser Funktionen einen Parameter (s. PrintSteuer), dann
- wird der folgende Wert als Parameter übergeben. Bei s3 klappt das
- natürlich nicht, deshalb wird s3 in so einem Fall ignoriert. Sind die
- Funktionen ausgeführt wird der "string" mit PrintString(string) ausgege-
- ben. Ein Beispiel:
-
- TAB zu Spalte 15,Unterstreichen an, Fettdruck an
- Tabellenüberschrift "Jahresübersicht"
- Neue Zeile, Fettdruck aus, Tab zu Spalte 18
- Untertitel "für 1988"
- Neue Zeile, Unterstrichen aus
- wird Programmiert als:
- PrintString4(5,15,1AH,6,"Jahresübersicht");
- PrintString4(1,7,5,18,"für 1988");
- PrintString4(1,1BH,-1,-1,"");
-
- Über die Bedeutung der übergebenen Parameter gibt die
- Beschreibung zum HEX-Format Auskunft.
-
-
- Beschreibung des Formats der .HEX-Datei:
-
- Es handelt sich um eine Textdatei, die keinerlei Formatierungszeichen
- enthalten darf. Außerdem werden außer für den Namen und die Kommentare nur
- Hexadezimalzahlen verwendet, die durch Komma oder Leerzeichen voneinander
- getrennt sind.
-
- In der 1.(interpretierbaren) Zeile steht der Name der Anpassung (Wordplus
- zeigt diesen Namen zusammen mit der Tabelle der definierten Zeichen an).
-
- In der 2.Zeile stehen 6 Hexzahlen, die WordPlus für verschiedene Funktionen
- benötigt, wichtig für Typenraddrucker.
-
- Danach folgen die Druckersteuerfunktionen. Jede Zeile hat folgenden Aufbau:
- Nummer der Funktion, danach bis zu 253 Hexzahlen die direkt an den
- Drucker geschickt werden. Codes 80 und 81 werden wie oben in
- PrintSteuer beschrieben durch einen aktuellen Wert vom Programm
- ersetzt. Zeichen hinter einem * werden als Kommentar betrachtet und
- ignoriert.
- Manche Druckerfunktionen benötigen einen Parameter aus dem Programm.
- dafür wird in der Tabelle eine 80 (für das niederwertige Byte) und
- 81 (für das hochwertige Byte) eingesetzt. Die Funktionen 1 bis 33h
- bearbeiten nur das niederwertige Byte, 81 darf nicht eingesetzt
- werden.
- Die Tabelle der Druckerfunktionen wird mit einer Zeile beendet, die nur eine 0
- enthält.
-
- Darauf folgt die Übersetzungstabelle für den Zeichensatz. Sie ist genauso
- aufgebaut wie die Funktionstabelle und wird auch mit einer Zeile mit 0
- beendet.
-
- Folgende Erweiterungen wurden in die Funktionstabelle eingebaut:
-
- 34 * Buchstaben doppelter Höhe an
- 35 * aus
- 36 * Prportionalschrift an
- 37 * Proportionalschrift aus
- 38 * Textstellung linksbündig
- 39 * zentriert
- 3A * rechtsbündig
- 3B * Blocksatz
- 3C * Starte 8-Nadelgrafik, 60 DPI
- 3D * Starte 8-Nadelgrafik, 120 DPI
- 3E * Starte 24-Nadelgrafik, 120 DPI
- 3F * Starte 24-Nadelgrafik, 360 DPI
- * 40 * Bisher nicht belegt
-
- Grundsätzlich ist es egal, wie die Steuerfunktionen belegt werden. Wenn aber
- jeder seine eigene Aufteilung vornimmt, ist es aus mit dem Programmtausch.
-
- Ein Beispiel steht in der Datei LQ_15_OE.HEX.
-
-
-
-
- Viel Spaß beim Hacken!
-